package com.qunar.wan.common_api.service;
import com.qunar.wan.common_api.model.Activity;
import com.qunar.wan.common_api.model.User;
import com.qunar.wan.common_api.serializer.RowBounds;
import com.qunar.wan.common_api.service.mapper.ActivityMapper;

import java.util.Date;
import java.util.List;

/**
 * User: cyoung Date: 11/25/13 Time: 6:51 PM
 */
public interface ActivityService extends BaseService<Activity, ActivityMapper> {

    /**
     * 找出所有活动中最热门活动
     *
     * @return {@link java.util.List<  com.qunar.wan.common_api.model.Activity  >}
     */
    List<Activity> selectHots(RowBounds rowBounds);

    /**
     * 审核活动
     *
     * @param activity 活动
     * @param admin    活动评定人
     * @return
     */

    void examine(Activity activity, User admin);

    /**
     * 根据主键查找活动
     *
     * @param activityId
     * @return
     */
    Activity selectById(int activityId);

    /**
     * 用户发布过的活动 分页
     *
     * @param userId
     * @param rowBounds
     * @return
     */
    List<Activity> selectPublished(int userId, RowBounds rowBounds);


    /**
     * 统计用户发布活动数目
     *
     * @param userId
     * @return
     */
    int selectPublishedCount(int userId);

    /**
     * 查询所有待审核的活动
     *
     * @return
     */
    List<Activity> selectNotExamined(RowBounds rowBounds);


    /**
     * 查询所有待审核的活动的数量
     *
     * @return
     */
    int selectNotExaminedCount();

    /**
     * 根据开始时间查询所有活动
     *
     * @param claId
     * @param subClaId
     * @param days      查询指定时间举办的活动
     *                  ex . ["2013-12-12","2013-11-11"]
     * @param rowBounds
     * @return
     */
    List<Activity> selectByDays(int claId, int subClaId, String[] days, RowBounds rowBounds);

    /**
     * 统计根据指定时间内举办活动的数量
     *
     * @param claId
     * @param subClaId
     * @param days     查询指定时间举办的活动
     *                 ex . ["2013-12-12","2013-11-11"]
     * @return
     */
    int selectCountByDays(int claId, int subClaId, String[] days);

    /**
     * 根据开始时间查询所有活动
     *
     * @param date 举办时间
     * @return
     */
    List<Activity> selectByStartDay(Date date);

    /**
     * 根据结束时间查询所有活动
     *
     * @param date 结束时间
     * @return
     */
    List<Activity> selectByEndDay(Date date);


    /**
     * 分页查找分类下活动
     *
     * @param claId       大类ID
     * @param subClaId    小类ID
     * @param showExpired 是否显示过期活动     true显示
     * @param rowBounds
     * @return
     */

    List<Activity> selectByClassify(int claId, int subClaId, boolean showExpired, RowBounds rowBounds);

    /**
     * 统计分类下活动数量
     *
     * @param claId       大类ID
     * @param subClaId    小类ID
     * @param showExpired 是否显示过期活动    true显示
     * @return
     */
    int selectCountByClassify(int claId, int subClaId, boolean showExpired);
}
